<?php

namespace app\zyhsapi\model;

use XznsTools\cache\zyhs\CacheManageZyhs;

class ZyhsConsultRtcUserBenefits extends BaseCacheZyhs
{
    protected $table = 'good_wechat.zyhs_consult_rtc_user_benefits';

    protected $cacheModel = 'zyhs.consult_rtc_user_benefits';

    /**
     * 获取用户免费咨询RTC 用户福利
     * @param int $appType 1=>准有好事 2=>准了APP
     * @param int $uid
     * @return array|null
     * @throws \Exception
     */
    public function getConsultRtcUserBenefits(int $appType, int $uid)
    {
        $data = CacheManageZyhs::getInstance()->setCacheConfig($this->cacheModel, $appType . ':' . $uid)->getDataAndSet(function () use ($appType, $uid)
        {
            try
            {
                $time = time();
                return $this->where(['app_type' => $appType, 'uid' => $uid, 'rtc_id' => 0, 'expire_time' => ['>', $time]])->order('id desc')->findOrFail()->toArray();
            }
            catch (\Exception $e)
            {
                return [''];
            }
        });

        if (array_filter($data))
        {
            $time = time();
            $data = arrayKeyData2int($data, ['id', 'app_type', 'rtc_id', 'uid', 'type', 'min', 'create_time', 'expire_time', 'use_time']);
            if ($data['rtc_id'] > 0 || $data['expire_time'] <= $time)
            {   // 福利已使用 或者 福利已过期
                return [];
            }
            //  福利存在
            return $data;
        } else
        {   // 福利不存在
            return [];
        }
    }

    /**
     * 新增用户免费咨询RTC 用户福利
     * @param int $appType 1=>准有好事 2=>准了APP
     * @param int $uid
     * @return true
     * @throws \Exception
     */
    public function SaveData(int $appType, int $uid): bool
    {
        $info = $this->getConsultRtcUserBenefits($appType, $uid);
        if ($info)
        {   // 已经存在 新人福利了  不再赠送福利 给原福利续期 1 天
            $this->updateData($info['id'], $appType, $uid, ['expire_time' => $info['expire_time'] + 86400]);
            return true;
        }
        $nowTime = time();
        $this->insert([
            'app_type' => $appType,
            'uid' => $uid,
            'rtc_id' => 0,
            'type' => 1,
            'min' => 5,
            'aid' => 0,
            'create_time' => $nowTime,
            'expire_time' => $nowTime + 86400,  // 1天有效期
            'use_time' => 0,
        ]);
        // 删除缓存
        CacheManageZyhs::getInstance()->setCacheConfig($this->cacheModel, $appType . ':' . $uid)->rmCache();

        return true;
    }

    /**
     * 使用 用户免费咨询RTC 用户福利
     * @param int $id
     * @param int $appType 1=>准有好事 2=>准了APP
     * @param int $uid
     * @param array $data
     * @return bool
     */
    public function updateData(int $id, int $appType, int $uid, array $data)
    {
        try
        {
            $this->where(['id' => $id])->update($data);

            CacheManageZyhs::getInstance()->setCacheConfig($this->cacheModel, $appType . ':' . $uid)->rmCache();
            return true;
        }
        catch (\Exception $e)
        {
            \think\Log::write(__CLASS__ . ' => ' . __FUNCTION__ . '()异常：' . $e->getMessage() . '失败信息：' . $e->getFile() . ':' . $e->getLine(), 'error', true);
            return false;
        }
    }

    /**
     * 发送RTC用户福利
     * @param int $appType 1=>准有好事 2=>准了APP
     * @param array $data
     * @return bool
     */
    public function SendRtcBenefits(int $appType,array $data)
    {
        try
        {
            $this->insert($data);
            // 删除缓存
            CacheManageZyhs::getInstance()->setCacheConfig($this->cacheModel, $appType . ':' . $data['uid'])->rmCache();

            return true;
        }
        catch (\Exception $e)
        {
            \think\Log::write(__CLASS__ . ' => ' . __FUNCTION__ . '() 发放连线福利 - 异常：' . $e->getMessage() . '失败信息：' . $e->getFile() . ':' . $e->getLine(), 'error', true);
            return false;
        }
    }
}
